package color;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
 * 本类目的为调整选择的图片的大小，以防过小不便调整，或者过大溢出屏幕
 *
 */
public class Adjust {
    /**
     * 本方法为本类设置目的的具体实现，给定选中图片的绝对路径，返回进行大小调整后的图片路径，在本应用中常设调整后的图片为“out.jpg”
     * <p>规定最后大小为长小于等于屏幕的百分之三十，宽小于等于屏幕的百分之六十，其中必有长或宽等于其最大限度值<br>
     * @param from 选中图片的绝对路径
     * @param to 进行大小调整后的图片路径
     */
    public final static void adjust(String from, String to) {
        try {
            // 读入文件
            BufferedImage src = ImageIO.read(new File(from));
            // 得到原图宽
            int width = src.getWidth();
            // 得到原图长
            int height = src.getHeight();
            //获取屏幕尺寸
            Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
            //根据长宽分别设置缩放比例
            double scale1=0.3*screenSize.width/width;
            double scale2=0.6*screenSize.height/height;
            //如果按长度缩放比例进行缩放，宽度将大于屏幕的百分之三十，则按宽度缩放比例缩放
            if(scale1>scale2) {
                width = (int) (width * scale2);
                height = (int) (height * scale2);
            }
            //如果按宽度缩放比例进行缩放，长度将大于屏幕的百分之六十，则按长度缩放比例缩放
            else{
                width = (int) (width * scale1);
                height = (int) (height * scale1);
            }
            Image image = src.getScaledInstance(width, height, Image.SCALE_DEFAULT);
            BufferedImage result = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics g = result.getGraphics();
            // 绘制缩小后的图
            g.drawImage(image, 0, 0, null);
            g.dispose();
            // 输出到文件流
            ImageIO.write(result, "jpg", new File(to));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
